10929. Ты можешь сказать 11

 

По заданному натуральному числу n определить, делится ли оно нацело на 11.

 

Вход. Каждая строка содержит натуральное число, десятичная запись которого имеет не более 1000 цифр. Последняя строка содержит 0 и не обрабатывается.

 

Выход. Для каждого теста вывести сообщение, делится ли n на 11 в формате, приведенном ниже.

 

Пример входа

112233

30800

2937

323455693

5038297

112234

0

 

Пример выхода

112233 is a multiple of 11.

30800 is a multiple of 11.

2937 is a multiple of 11.

323455693 is a multiple of 11.

5038297 is a multiple of 11.

112234 is not a multiple of 11.

 

 

РЕШЕНИЕ

математика

 

Анализ алгоритма

Число делится на 11 тогда и только тогда, когда разность суммы цифр, стоящих на нечетных позициях и суммы цифр на четных позициях, делится на 11.

Для каждого теста вычисляем указанную разность и проверяем, делится ли она на 11.

 

Пример

Рассмотрим число 323455693. Сумма цифр на нечетных позициях равна 3 + 3 + 5 + 6 + 3 = 20, сумма цифр на четных позициях равна 2 + 4 + 5 + 9 = 20. Разница сумм равна 20 – 20 = 0, что делится на 11. Следовательно, число 323455693 делится на 11.

 

Реализация алгоритма

Входное число храним в массиве s.

 

char s[1001];

 

Читаем входные данные, пока не встретится строка, содержащая ‘0’. Переменная a содержит сумму цифр, стоящих на четных позициях,  переменная b – на нечетных. Первая цифра входного числа хранится в s[0]. Если индекс массива i нечетный, то цифра s[i] прибавляется к a, иначе – к b). Изначально a = b = 0.

 

while(scanf("%s",s),strcmp(s,"0"))

{

  a = b = 0; len = (int)strlen(s);

  for(i = 0; i < len; i++)

  {

    if (i % 2) a += s[i] - '0';

    else b += s[i] - '0';

  }

 

Выводим результат. Если разность ab делится на 11, то исходное число делится на 11.

 

  printf("%s is ",s);

  if ((a - b) % 11) printf("not ");

  printf("a multiple of 11.\n");

}